<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      body,
      ul {
        margin: 0;
        padding: 0;
      }
      body {
        position: relative;
        width: 1920px;
        height: 1080px;
        box-sizing: border-box;
        border: 3px solid red;

        /* 指定缩放的原点在左上角 */
        transform-origin: left top;
      }

      ul {
        width: 100%;
        height: 100%;
        list-style: none;

        display: flex;
        flex-direction: row;
        flex-wrap: wrap;
      }

      li {
        width: 33.333%;
        height: 50%;
        box-sizing: border-box;
        border: 2px solid green;
        font-size: 30px;
      }
    </style>
  </head>
  <body>
    <ul>
      <li>1</li>
      <li>2</li>
      <li>3</li>
      <li>4</li>
      <li>5</li>
      <li>6</li>
    </ul>

    <script>
      /**
       * 设计稿:  1920 * 1080
       * 目标适配:  1920 * 1080   3840 * 2160 ( 2 * 2 ) ;  7680 * 2160( 4 * 2 )
       */

      // 1.设计稿的尺寸
      const targetX = 1920
      const targetY = 1080
      const targetRatio = 16 / 9 // 宽高比率

      // 2.拿到当前设备(浏览器)的宽度
      const currentX = document.documentElement.clientWidth || document.body.clientWidth
      const currentY = document.documentElement.clientHeight || document.body.clientHeight
      //  1920 * 1080  -> 3840 * 2160

      // 3.计算缩放比例
      const currentRatio = currentX / currentY // 实际宽高比
      let scaleRatio = currentX / targetX // 实际宽 / 设计稿宽

      // 超宽屏
      if (currentRatio > targetRatio) {
        scaleRatio = currentY / targetY
        // 不会有滚动条，居中展示
        document.body.style = `width:${targetX}px; height:${targetY}px; transform: scale(${scaleRatio}) translateX(-50%); left: 50%`
      } else {
        // 可能有滚动条
        document.body.style = `width:${targetX}px; height:${targetY}px; transform: scale(${scaleRatio})`
      }
    </script>
  </body>
</html>
